package com.xiahui.day11.Test8;

/**
 * equals()方法：比较两个对象是否为同一个对象(比较地址)
 * 面试题：==和equals的区别？
 * ==比较基本数据类型 比较值
 * ==比较引用数据类型 比较地址
 * equals()方法底层实现依然使用==比较地址
 * 但是我们可以重写equals方法 自定义比较规则   String类就是对equals方法进行了重写
 * 将原本的比较地址 重写为了比较地址 并且比较 内容
 * 记住：只要是new出来的两个对象 地址是绝对不相同的  ==比较就为false
 * 人类
 * 场景：如果现在有这样的"两个人" 这"两个人"名字和身份证号都相同 实际为同一个人
 * 那么在程序中就表现为两个对象 所以我们应该重写equals方法 将两个对象的比较结果为true
 */
public class Person {
    private String name;
    private String idCard;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getIdCard() {
        return idCard;
    }

    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }

    public Person(String name, String idCard) {
        this.name = name;
        this.idCard = idCard;
    }

    public Person() {
    }

    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        // 因为形参为Object类型的 而Object类中没有任何属性 所以不能直接访问 name  以及 idCard
        // 如需访问 必须 向下转型(强制类型转换)
        Person p1 = (Person) obj;
        // 如何确定调用的方法属于哪个类的方法？
        // 根据调用方法的对象 所属的类型来判断
        if (this.name.equals(p1.name) && this.idCard.equals(p1.idCard)) {
            return true;
        }
        return false;
    }


    public static void main(String[] args) {
        Person p1 = new Person("赵四", "4578925985324539875421");
        Person p2 = new Person("赵四", "4578925985324539875421");


        System.out.println(p1 == p2); // false
        System.out.println(p1.equals(p2)); // false


    }


}
